_applyLayoutGroup(group) {
let options = this._buildOptionsString();
let [layouts, variants] = this._buildGroupStrings(group);
+ let model = this._xkbModel;
if (this._currentKeymap &&
this._currentKeymap.layouts === layouts &&
this._currentKeymap.variants === variants &&
- this._currentKeymap.options === options)
+ this._currentKeymap.options === options &&
+ this._currentKeymap.model === model)
return;
- this._currentKeymap = {layouts, variants, options};
- global.backend.set_keymap(layouts, variants, options);
+ this._currentKeymap = {layouts, variants, options, model};
+ global.backend.set_keymap(layouts, variants, options, model);
}
_applyLayoutGroupIndex(idx) {
this._xkbOptions = options;
}
+ setKeyboardModel(model) {
+ this._xkbModel = model;
+ }
+
_buildOptionsString() {
let options = this._xkbOptions.join(',');
return options;
this.emit('keyboard-options-changed');
}
+ _emitKeyboardModelChanged() {
+ this.emit('keyboard-model-changed');
+ }
+
_emitPerWindowChanged() {
this.emit('per-window-changed');
}
this._layouts = '';
this._variants = '';
this._options = '';
+ this._model = '';
this._reload();
const layouts = props['X11Layout'].unpack();
const variants = props['X11Variant'].unpack();
const options = props['X11Options'].unpack();
+ const model = props['X11Model'].unpack();
if (layouts !== this._layouts ||
variants !== this._variants) {
this._options = options;
this._emitKeyboardOptionsChanged();
}
+ if (model !== this._model) {
+ this._model = model;
+ this._emitKeyboardModelChanged();
+ }
}
get inputSources() {
get keyboardOptions() {
return this._options.split(',');
}
+
+ get keyboardModel() {
+ return this._model;
+ }
}
class InputSourceSessionSettings extends InputSourceSettings {
this._KEY_INPUT_SOURCES = 'sources';
this._KEY_MRU_SOURCES = 'mru-sources';
this._KEY_KEYBOARD_OPTIONS = 'xkb-options';
+ this._KEY_KEYBOARD_MODEL = 'xkb-model';
this._KEY_PER_WINDOW = 'per-window';
this._settings = new Gio.Settings({schema_id: this._DESKTOP_INPUT_SOURCES_SCHEMA});
this._settings.connect(`changed::${this._KEY_INPUT_SOURCES}`, this._emitInputSourcesChanged.bind(this));
this._settings.connect(`changed::${this._KEY_KEYBOARD_OPTIONS}`, this._emitKeyboardOptionsChanged.bind(this));
+ this._settings.connect(`changed::${this._KEY_KEYBOARD_MODEL}`, this._emitKeyboardModelChanged.bind(this));
this._settings.connect(`changed::${this._KEY_PER_WINDOW}`, this._emitPerWindowChanged.bind(this));
}
return this._settings.get_strv(this._KEY_KEYBOARD_OPTIONS);
}
+ get keyboardModel() {
+ return this._settings.get_string(this._KEY_KEYBOARD_MODEL);
+ }
+
get perWindow() {
return this._settings.get_boolean(this._KEY_PER_WINDOW);
}
this._settings = new InputSourceSessionSettings();
this._settings.connect('input-sources-changed', this._inputSourcesChanged.bind(this));
this._settings.connect('keyboard-options-changed', this._keyboardOptionsChanged.bind(this));
+ this._settings.connect('keyboard-model-changed', this._keyboardModelChanged.bind(this));
this._xkbInfo = KeyboardManager.getXkbInfo();
this._keyboardManager = KeyboardManager.getKeyboardManager();
reload() {
this._reloading = true;
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
+ this._keyboardManager.setKeyboardModel(this._settings.keyboardModel);
this._inputSourcesChanged();
this._reloading = false;
}
this._keyboardManager.reapply();
}
+ _keyboardModelChanged() {
+ this._keyboardManager.setKeyboardModel(this._settings.keyboardModel);
+ this._keyboardManager.reapply();
+ }
+
_updateMruSettings() {
// If IBus is not ready we don't have a full picture of all
// the available sources, so don't update the setting